﻿using FlexFlow.Model;
using System;
namespace FlexFlow.Base.Interface
{
    public interface IApplicationPool
    {
        /// <summary>
        /// 取得与指定类型的活动绑定的工作流执行程序
        /// </summary>
        /// <param name="actType">
        /// 活动类型
        /// </param>
        /// <param name="procId">
        /// 流程ID
        /// </param>
        /// <returns>
        /// 该类型绑定的执行程序，如果执行程序不存在，则返回null
        /// </returns>
        IWorkFlowApplication GetApplication(Guid procId, String actType);
        /// <summary>
        /// 向应用程序池注册指定的工作流引擎执行程序
        /// </summary>
        /// <param name="actType">
        /// 要注册的执行程序对应的活动类型
        /// </param>
        /// <param name="app">
        /// 要注册的执行程序
        /// </param>
        /// <param name="procId">
        /// 要注册的执行程序所在的流程ID，如果该参数为空，则注册为默认活动处理程序
        /// </param>
        /// <param name="actDescription">
        /// 活动类型描述
        /// </param>
        /// <param name="cssClass">
        /// 应用程序节点在前台展示的样式
        /// </param>
        /// <returns>
        ///  注册结果，成功为true，失败为false
        /// </returns>
        bool RegisterApplication(String actType, IWorkFlowApplication app, Guid? procId = null, string actDescription = "", string cssClass = "");
        /// <summary>
        /// 取得已经注册的应用程序列表
        /// </summary>
        /// <returns>
        /// 已经注册的应用程序列表
        /// </returns>
        ApplicationDefine[] GetRegisteredApplications();
    }
}
